home *** CD-ROM | disk | FTP | other *** search
- package com.markdavies.net
- {
- import com.markdavies.events.CustomEvent;
- import flash.display.Loader;
- import flash.display.LoaderInfo;
- import flash.events.*;
- import flash.media.Sound;
- import flash.net.URLLoader;
- import flash.net.URLRequest;
- import flash.utils.Dictionary;
- import flash.utils.Timer;
-
- public class Preloader extends EventDispatcher
- {
-
- public static var LOADING:String = "loading";
-
- public static var LOADED:String = "loaded";
-
- public static var TYPE_ROOT:String = "root";
-
- public static var ERROR:String = "error";
-
- public static var EVENT_SITE_LOAD_ERROR:String = "loadError";
-
- public static var TYPE_SOUND:String = "sound";
-
- public static var TYPE_XML:String = "xml";
-
- public static var UNLOADED:String = "unloaded";
-
- public static var TYPE_LOADER:String = "loader";
-
-
- public var timer:Timer;
-
- private var _dperc:Number = 0;
-
- private var _lperc:Number = 0;
-
- public var itemRefs:Dictionary;
-
- private var _isLoaded:Boolean = false;
-
- public var preloadItems:Dictionary;
-
- public function Preloader()
- {
- preloadItems = new Dictionary();
- itemRefs = new Dictionary();
- _isLoaded = false;
- _lperc = 0;
- _dperc = 0;
- super();
- }
-
- public function stopCheckPreload() : void
- {
- timer.removeEventListener(TimerEvent.TIMER,doPreload);
- timer.stop();
- }
-
- public function get percLoaded() : Number
- {
- return _lperc;
- }
-
- public function addItem(param1:*, param2:String = null, param3:Boolean = false) : void
- {
- var _loc4_:URLLoader = null;
- var _loc5_:Loader = null;
- var _loc6_:Sound = null;
- var _loc7_:URLRequest = null;
- var _loc8_:String = null;
- var _loc9_:String = null;
- switch(typeof param1)
- {
- case "string":
- _loc9_ = String(param1.substr(param1.lastIndexOf(".") + 1,3));
- if(param1.lastIndexOf(".") == -1)
- {
- return;
- }
- switch(_loc9_)
- {
- case "xml":
- _loc8_ = Preloader.TYPE_XML;
- break;
- case "swf":
- case "jpg":
- case "jpeg":
- case "gif":
- case "png":
- _loc8_ = Preloader.TYPE_LOADER;
- break;
- case "mp3":
- _loc8_ = Preloader.TYPE_SOUND;
- }
- break;
- default:
- _loc8_ = Preloader.TYPE_ROOT;
- }
- switch(_loc8_)
- {
- case Preloader.TYPE_XML:
- _loc4_ = new URLLoader();
- _loc7_ = new URLRequest(param1);
- _loc4_.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
- _loc4_.load(_loc7_);
- preloadItems[param1] = {
- "loader":_loc4_,
- "status":Preloader.UNLOADED,
- "type":Preloader.TYPE_XML
- };
- break;
- case Preloader.TYPE_LOADER:
- _loc5_ = new Loader();
- _loc7_ = new URLRequest(param1);
- _loc5_.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
- _loc5_.load(_loc7_);
- preloadItems[param1] = {
- "loader":_loc5_,
- "status":Preloader.UNLOADED,
- "type":Preloader.TYPE_LOADER
- };
- break;
- case Preloader.TYPE_SOUND:
- _loc6_ = new Sound();
- _loc7_ = new URLRequest(param1);
- preloadItems[param1] = {
- "loader":_loc6_,
- "status":Preloader.UNLOADED,
- "type":Preloader.TYPE_SOUND
- };
- _loc6_.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
- _loc6_.load(_loc7_);
- break;
- case Preloader.TYPE_ROOT:
- preloadItems[param1] = {
- "loader":param1,
- "status":Preloader.UNLOADED,
- "type":Preloader.TYPE_ROOT
- };
- break;
- default:
- return;
- }
- preloadItems[param1].required = param3;
- if(param2 != null)
- {
- itemRefs[param2] = preloadItems[param1];
- }
- }
-
- public function get isLoaded() : Boolean
- {
- return _isLoaded;
- }
-
- private function doPreload(param1:Event) : void
- {
- var lb:int = 0;
- var lt:int = 0;
- var li:LoaderInfo = null;
- var allb:Number = NaN;
- var allt:Number = NaN;
- var requiredFilesMissing:Boolean = false;
- var key:Object = null;
- var e:Event = param1;
- lb = 0;
- lt = 0;
- allb = 0;
- allt = 0;
- requiredFilesMissing = false;
- for(key in preloadItems)
- {
- switch(preloadItems[key].status)
- {
- case Preloader.ERROR:
- case Preloader.LOADING:
- case Preloader.UNLOADED:
- if(preloadItems[key].required == true)
- {
- requiredFilesMissing = true;
- }
- }
- if(preloadItems[key].status != Preloader.ERROR)
- {
- try
- {
- preloadItems[key].loader.contentLoaderInfo;
- li = preloadItems[key].loader.contentLoaderInfo;
- lb = int(li.bytesLoaded);
- lt = int(li.bytesTotal);
- }
- catch(ce2:Error)
- {
- try
- {
- lb = int(preloadItems[key].loader.bytesLoaded);
- lt = int(preloadItems[key].loader.bytesTotal);
- }
- catch(ce1:Error)
- {
- lb = int(preloadItems[key].loader.loaderInfo.bytesLoaded);
- lt = int(preloadItems[key].loader.loaderInfo.bytesTotal);
- }
- }
- if(lb >= lt && lb != 0)
- {
- preloadItems[key].status = Preloader.LOADED;
- }
- allb += lb;
- allt += lt;
- }
- }
- _lperc = allb / allt;
- if(_lperc > 1)
- {
- _lperc = 1;
- }
- _dperc = Math.floor(_lperc * 100);
- if(_dperc == 100 && requiredFilesMissing != true)
- {
- onLoadHandler();
- _isLoaded = true;
- }
- }
-
- public function startCheckPreload() : void
- {
- _isLoaded = false;
- try
- {
- timer.running;
- }
- catch(e:TypeError)
- {
- timer = new Timer(100);
- }
- timer.addEventListener(TimerEvent.TIMER,doPreload);
- timer.start();
- }
-
- private function onLoadHandler() : void
- {
- stopCheckPreload();
- dispatchEvent(new Event(Event.COMPLETE));
- }
-
- private function ioErrorHandler(param1:Event) : void
- {
- var _loc2_:Object = null;
- for(_loc2_ in preloadItems)
- {
- if(preloadItems[_loc2_].loader == param1.target)
- {
- preloadItems[_loc2_].status = Preloader.ERROR;
- if(preloadItems[_loc2_].required == true)
- {
- dispatchEvent(new CustomEvent(Preloader.EVENT_SITE_LOAD_ERROR));
- stopCheckPreload();
- }
- break;
- }
- }
- }
-
- public function get percLoadedDisplay() : String
- {
- return _dperc.toString() + "%";
- }
- }
- }
-